#pragma once

#include "../include/IMessageHandler.h"
#include <functional>

namespace MessageFramework {

/**
 * @brief 交易信号消息体
 */
struct TradingSignalBody {
    char instrumentId[31];      ///< 合约代码
    char direction[8];          ///< 方向：BUY/SELL
    char offsetFlag[8];         ///< 开平标志：OPEN/CLOSE
    double price;               ///< 价格
    int volume;                 ///< 数量
    char orderType[16];         ///< 订单类型：LIMIT/MARKET
    char strategyId[32];        ///< 策略ID
    char comment[128];          ///< 备注

    /**
     * @brief 从JSON字符串解析
     */
    static TradingSignalBody fromJson(const std::string& json);

    /**
     * @brief 转换为JSON字符串
     */
    std::string toJson() const;
};

/**
 * @brief 交易信号Handler（示例实现）
 *
 * 用途：
 * - TraderManager接收StrategyEngine发送的交易信号
 * - 验证信号合法性
 * - 调用TraderEngine执行交易
 * - 返回执行结果
 */
class TradeSignalHandler : public IMessageHandler {
public:
    /**
     * @brief 信号处理回调
     *
     * @param signal 交易信号
     * @return 0=成功，<0=错误码
     */
    using SignalCallback = std::function<int(const TradingSignalBody& signal,
                                             const MessageHeader& header)>;

    TradeSignalHandler() = default;
    explicit TradeSignalHandler(SignalCallback callback);

    /**
     * @brief 处理消息
     */
    int handleMessage(const Message& message) override;

    /**
     * @brief 获取支持的消息类型
     */
    std::string getMessageType() const override {
        return "TradeSignal";
    }

    /**
     * @brief 获取Handler名称
     */
    std::string getName() const override {
        return "TradeSignalHandler";
    }

    /**
     * @brief 设置回调函数
     */
    void setCallback(SignalCallback callback);

private:
    SignalCallback m_callback;

    /**
     * @brief 验证信号合法性
     */
    bool validateSignal(const TradingSignalBody& signal) const;
};

} // namespace MessageFramework
